package cn.ly.design.structure;

/**
 * 装饰器模式的应用场景：
   1、需要扩展一个类的功能。
   2、动态的为一个对象增加功能，而且还能动态撤销。
   3、继承不能做到这一点，继承的功能是静态的，不能动态增删。
        缺点：产生过多相似的对象，不易排错！
       总结：传入参数，持有原有的对象实例，进行处理的就是动态性的，这种对象可以后期动态生成，如用反射的动态代理
       继承做不到
 * @author liuyu
 *
 */

public class Decorator implements DSourceable{
	
	private DSourceable dsource;
	
	public Decorator(DSourceable dsource){
		this.dsource = dsource;
	}

	@Override
	public void method1() {
		System.out.println("before do something");
		
		this.dsource.method1();
		
		System.out.println("after do something");
	}
}

interface DSourceable{
	void method1();
}

class DSource implements DSourceable{
	@Override
	public void method1() {
		System.out.println("this is source");
	}
	
}



